Skip to content

test(search): close the band adoption gate's route-coverage holes - #1394

Merged
BigSimmo merged 10 commits into
mainfrom
claude/top-search-design-mockups-w53znc
Jul 30, 2026
Merged

test(search): close the band adoption gate's route-coverage holes#1394
BigSimmo merged 10 commits into
mainfrom
claude/top-search-design-mockups-w53znc

Conversation

@BigSimmo

@BigSimmo BigSimmo commented Jul 30, 2026

Copy link
Copy Markdown
Owner

Summary

Closes the last live item from the PR #1316 review (#096). Two files: tests/search-results-band-adoption.test.ts and the ledger row. No production code changes — this is the gate that guards the band, not the band itself.

The reported gap was that modeHrefToPagePath returned null for pathOnly === "/", so /?mode=prescribing and href-less Documents never entered the route inventory and src/app/(search-app)/page.tsx was never checked. The gate claimed to cover "every production search route" and did not.

Fixing only that would have made the gate red, not correct. Adding the root route surfaced two further holes in the same walker:

  • It was hard-capped at two import hops. The root route's real chain is four: layout.tsx → shared-search-app-shell → global-search-shell → ClinicalDashboard → document-search-results. A fixed hop count silently under-reports reachability rather than failing loudly.
  • It followed neither layout.tsx nor dynamic(() => import(...)). Both are load-bearing here. (search-app)/page.tsx renders only a pass-through (HomePageClient returns children ?? null) and its band arrives through the group layout's shared shell — so ignoring layouts reports a correctly-wired route as an orphan. And the dashboard code-splits its mode workspaces through clinical-dashboard-lazy.tsx, so a static-only walk cannot see the band behind Differentials, Favourites or the prescribing workspace.

Replaced the hop-counted walk with a bounded BFS that resolves @/ and relative specifiers, follows static and lazy imports, and treats a route's layouts as part of its rendered output — which is what App Router semantics actually mean.

Verification

  • npm run test432 files, 4450 passed, 4 skipped
  • npm run typecheck, npm run lint — exit 0
  • npm run format:checkAll matched files use Prettier code style!
  • npm run docs:check-linksdocs link check passed: 1365 repo path references resolve.
  • npm run verify:uiUI verification not run: no UI, routing, styling, reduced-motion or forced-colors behaviour changed. This touches one test file and one markdown file.
  • npm run eval:retrieval:quality — not applicable; no retrieval, ranking, selection, chunking or scoring behaviour changed.
  • npm run check:production-readiness — not applicable; no clinical workflow, privacy, environment, Supabase, source-governance or deployment behaviour changed.

Each part of the fix was verified load-bearing rather than assumed:

Reverted Result
pathOnly === "/" early return Mode-href discovery must include the root dashboard route…: expected false to be true
MAX_IMPORT_DEPTH back to 2 expected [ 'src/app/(search-app)/page.tsx' ] to deeply equal []

The negative fixture now writes real files to a temp dir and asserts both directions — a route that reaches the band and one that doesn't. The previous in-memory fixture only ever asserted false, which would pass against a walker broken outright.

RAG impact: no retrieval behaviour change — this modifies a structural test and a documentation ledger row. No file under src/lib/rag/**, clinical-search, retrieval-selection, released-search-order, ranking-config, the eval harness, the golden fixture, or the retrieval RPCs is touched.

Risk and rollout

  • Risk: low, and confined to CI signal rather than runtime. The BFS is bounded at depth 8 with a visited set, so it terminates on cycles; it skips mockup paths, matching the existing exemption. The realistic failure mode is a stricter gate surfacing a genuinely unwired route — which is the intent.
  • Rollback: revert the single commit. The band and every call site are untouched, so no user-facing behaviour can regress.
  • Provider or production effects: None. No provider-backed gate was run and no live service contacted.

Clinical Governance Preflight

Not applicable — no ingestion, answer generation, search/ranking, source rendering, document access, privacy, production environment, or clinical output behaviour is touched. The change makes a structural test cover routes it previously skipped.

Notes

Worth recording why this took more than the one-line fix the finding implied: the gate's original premise — follow static imports from a page file to find the band — cannot hold for the dashboard-served modes, because the dashboard deliberately code-splits them and the root page delegates its chrome to a layout. The two-hop limit and the missing layout/dynamic handling were hiding that; the reported root-path bug was the symptom that led to them.

#096 is updated to record the closure and the two additional defects, so the next reader knows the gate's reachability model changed and why.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Akwz3Sdms8uJ5AkDt3CduY


Generated by Claude Code

Summary by CodeRabbit

  • Tests

    • Improved search-results route coverage to verify shared-band reachability across dashboard and standalone routes.
    • Added support for query-backed, root, and href-less modes in route discovery.
    • Added coverage for standard and lazy-loaded imports.
    • Refined adoption checks to follow layouts only where applicable and detect previously missed orphaned routes.
  • Documentation

    • Updated the outstanding-issues ledger with clarified review follow-ups and a new recommendation regarding band adoption checks.

The gate advertised "every production search route" and skipped the root
dashboard page, so `/?mode=prescribing` and href-less Documents were
never checked. Resolving those to `src/app/(search-app)/page.tsx`
surfaced two more holes in the same gate that the original finding did
not name, and fixing only the first would have produced a false orphan
rather than coverage:

- The walk was hard-capped at two import hops. The root route's real
  chain is four, so a fixed hop count silently under-reported
  reachability instead of failing loudly.
- It followed neither `layout.tsx` nor `dynamic(() => import(...))`.
  Both matter here: `(search-app)/page.tsx` renders only a pass-through
  and its band arrives through the group layout's shared shell, while
  the dashboard code-splits its mode workspaces through
  `clinical-dashboard-lazy.tsx`.

Replaced the hop-counted walk with a bounded BFS that resolves `@/` and
relative specifiers, follows static and lazy imports, and treats a
route's layouts as part of its rendered output — which is what App
Router semantics actually mean.

Each part was verified load-bearing rather than assumed: restoring the
`pathOnly === "/"` early return drops the root route from the inventory,
and capping depth back at 2 reports it as an orphan. The negative
fixture now uses real files on disk and asserts both directions, since
one that only ever returns false would pass against a walker that is
broken outright.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Akwz3Sdms8uJ5AkDt3CduY
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 23 minutes

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 76127cb4-6313-4584-8062-50a1a6011c11

📥 Commits

Reviewing files that changed from the base of the PR and between 7577a1e and 4a001ef.

📒 Files selected for processing (3)
  • docs/branch-review-ledger.md
  • docs/outstanding-issues.md
  • tests/search-results-band-adoption.test.ts
📝 Walkthrough

Walkthrough

The PR replaces heuristic band-adoption detection with file-based route and import traversal, adds coverage for dashboard and lazy-import paths, and updates the outstanding-issues ledger with revised findings and recommendation numbering.

Changes

Band adoption reachability

Layer / File(s) Summary
Route and import reachability engine
tests/search-results-band-adoption.test.ts
Resolves mode routes to page files and traverses bounded static and dynamic imports, including dashboard roots, standalone routes, aliases, and href-less modes.
Inventory and adoption validation
tests/search-results-band-adoption.test.ts, docs/outstanding-issues.md
Adds route-inventory and filesystem-fixture coverage for direct and lazy band mounting, while updating adoption-gate ledger entries and the next-id marker.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

Suggested labels: codex

Suggested reviewers: cursoragent

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the route-coverage test fix.
Description check ✅ Passed The description follows the required sections and provides concrete verification, risk, governance, and notes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands.

@supabase

supabase Bot commented Jul 30, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project sjrfecxgysukkwxsowpy because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@BigSimmo
BigSimmo marked this pull request as ready for review July 30, 2026 02:42

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e1ebfcf90b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tests/search-results-band-adoption.test.ts
@BigSimmo
BigSimmo enabled auto-merge (squash) July 30, 2026 02:48
Codex caught a hole I introduced one commit earlier, and it was worse
than the gap I was closing. Adding the route's layouts as reachability
roots applied to every route, and the (search-app) layout transitively
imports ClinicalDashboard — so any page under that group passed
regardless of what it rendered. Reproduced by reducing
services/page.tsx to <div />: the gate still passed 5/5.

Scope layouts to dashboard-owned routes using the repo's own statement
of ownership, isAlwaysStandaloneShellPath. Namespaced routes must now
reach the band through their own page; only the root dashboard route,
whose page renders a pass-through and whose band arrives via the shared
shell, keeps its layouts.

Re-verified both directions: with services/page.tsx gutted the gate now
reports it as an orphan, and passes when restored. Added a test pinning
reachabilityRoots directly, so the ownership scoping cannot be widened
back without failing — a unit assertion rather than a fixture page,
which would have created a real production route with no inbound link.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Akwz3Sdms8uJ5AkDt3CduY

Copy link
Copy Markdown
Owner Author

Re: "Stop counting unreachable layout imports as band adoption" — correct, and it was a hole I introduced. Fixed in f46d7a4e. Pushing promptly because auto-merge is armed and the previous commit would have landed the defect.

I reproduced it exactly as described rather than reasoning about it. Reducing src/app/(search-app)/services/page.tsx to <div />:

Test Files  1 passed (1)
     Tests  5 passed (5)

The gate passed with the services results page rendering nothing. Because I added every route's layouts as reachability roots, and (search-app)/layout.tsx transitively reaches ClinicalDashboarddocument-search-results, any page under that group satisfied the gate. That is worse than the root-route gap I set out to close — I traded one unchecked route for all of them.

Fix: scope layouts to dashboard-owned routes using the repo's own statement of ownership, isAlwaysStandaloneShellPath from src/lib/search-route-ownership.ts — thank you for the pointer, it's exactly the right source. Namespaced routes must now reach the band through their own page; only the root dashboard route keeps its layouts, which is the one case that genuinely needs them since its page renders a pass-through.

Re-verified both directions:

State Result
services/page.tsx gutted to <div /> expected [ 'src/app/(search-app)/services/page.tsx' ] to deeply equal [] — orphan reported
restored 6 passed

On your fixture suggestion: I pinned reachabilityRoots with a direct unit assertion instead of adding a bandless page under the app tree. A real page there would be a production route with no inbound nav link, which tests/route-reachability.test.ts would then flag — trading this hole for a different gate failure. The assertion gives the same protection: widening the scoping back fails immediately.

Verification: npm run test433 files, 4451 passed, 4 skipped; typecheck, lint, format:check all clean. One file changed.

Worth noting for the record: this is the second time on this PR that the reported symptom was the smaller part of the problem. The root-path bug led to the two-hop cap and the missing layout/dynamic handling; fixing those introduced this. A reachability model for a code-split App Router surface has more edges than it looks.


Generated by Claude Code

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f46d7a4e44

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tests/search-results-band-adoption.test.ts
…dered

Codex is right that the walker reports adoption for a route that keeps
its results import but stops rendering it; reducing services/page.tsx to
<div /> with imports retained keeps the gate green.

Recorded rather than fixed here, for two reasons. It is pre-existing —
the previous two-hop walker had no render check either — and it is not a
live risk: the same edit fails npm run lint with five no-unused-vars
warnings under --max-warnings 0, so the composite static gate catches
exactly the constructed scenario. The genuinely uncaught shape needs an
import referenced somewhere non-rendering, which is deliberate rather
than a slip.

Tightening it properly means tracking which bindings appear in JSX
element position or as the default export, since a re-export mounts with
no JSX at all. That is a third expansion of this walker in one PR, and
the second one introduced a worse hole than it closed, so it belongs in
its own change with its own review.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Akwz3Sdms8uJ5AkDt3CduY

Copy link
Copy Markdown
Owner Author

Re: "Verify imported components are actually rendered" — accurate, and I'm deliberately not fixing it in this PR. Recorded as #112 in ac2dd7c8.

I reproduced it rather than reasoning about it. Keeping every import in (search-app)/services/page.tsx and returning <div />:

Test Files  1 passed (1)
     Tests  6 passed (6)

So the walker does treat a discovered module as rendered. My earlier gut-check replaced the whole file including its imports, which is why it failed and this doesn't.

Two things change the disposition, though.

It is pre-existing, not introduced here. The previous two-hop walker matched from "@/components/…" and checked rendersBand on the imported file with no usage check either. This PR doesn't widen that hole; it inherits it.

The composite static gate already catches the constructed scenario. The same edit fails npm run lint:

1:10  warning  'Suspense' is defined but never used               @typescript-eslint/no-unused-vars
2:10  warning  'ServicesHomePage' is defined but never used       @typescript-eslint/no-unused-vars
3:10  warning  'ServicesNavigatorPage' is defined but never used  @typescript-eslint/no-unused-vars
✖ 5 problems (0 errors, 5 warnings)

The repo runs --max-warnings 0, so that's a hard failure, and lint sits in the same verify:cheap and static-pr job as this test. A route that drops its render and keeps the import cannot reach main. The genuinely uncaught shape needs the binding referenced somewhere non-rendering — a type position, or void Binding; — which is a deliberate act rather than a plausible slip.

Why not fix it now. Tightening it properly means tracking which imported bindings appear in JSX element position or as the default export — note export default Child is a real mount with no JSX, so "used in rendered JSX" alone is too narrow — and following dynamic() bindings the same way. That's the third expansion of this walker in one PR, and the second one introduced a worse hole than it closed: following layouts unconditionally let every page under (search-app) pass. I'd rather that analysis got its own change and its own review than ride along here.

One note on your suggested fixture: #112 records why not to prove this with a page under src/app. tests/codebase-index-coverage.test.ts also walks that tree and Vitest runs files in parallel, so a materialising route can be observed mid-run and left behind if the test fails between write and cleanup.

Verification on ac2dd7c8: npm run test — 433 files, 4451 passed, 4 skipped; typecheck, lint, format:check clean; docs:check-links — 1368 references resolve.


Generated by Claude Code

@BigSimmo

Copy link
Copy Markdown
Owner Author

@cursoragent resolve merge conflicts

@cursor

cursor Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Resolved and pushed on tip 7577a1ea. PR #1394 is MERGEABLE again (currently BLOCKED only by required checks).

Classification

One real conflict — simple. Only docs/outstanding-issues.md. Classic ledger ID collision (exactly what main’s #112 describes):

Side Claimed
This branch #112 = band adoption gate treats import as rendered; next-id=113
main (#1395) #112#114 = next-id concurrency / ModeNav clip / Web-Vitals noise; next-id=115

No product-code conflicts. No conflicting intents beyond who owns #112.

Resolution

  • Kept main’s #112, #113, #114
  • Renumbered this branch’s adoption-gate follow-up to #115
  • Set <!-- issues:next-id=116 -->
  • #096 closure text from this PR auto-merged cleanly

Complicated conflicts

None.

Open in Web Open in Cursor 

Resolve docs/outstanding-issues.md id collision: keep main's #112#114,
renumber this branch's adoption-gate follow-up to #115, bump next-id to 116.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
@BigSimmo

Copy link
Copy Markdown
Owner Author

@Cursorsgent Inspect the PR and repository state, identify the root cause of every failing CI check, unresolved review comment, merge conflict, and related defect. Apply the smallest robust fix using existing project patterns and best practices, without unrelated changes. Run Bugbot and all relevant lint, type-check, test, build, and CI-equivalent commands, fix any issues found, then resolve only the review comments that are fully addressed. Summarise the root causes, changes made, validation results, and any remaining blockers.

@BigSimmo

Copy link
Copy Markdown
Owner Author

@cursoragent Inspect the PR and repository state, identify the root cause of every failing CI check, unresolved review comment, merge conflict, and related defect. Apply the smallest robust fix using existing project patterns and best practices, without unrelated changes. Run Bugbot and all relevant lint, type-check, test, build, and CI-equivalent commands, fix any issues found, then resolve only the review comments that are fully addressed. Summarise the root causes, changes made, validation results, and any remaining blockers.

@cursor

cursor Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

CI/review closeout for #1394 is done on tip 66c5eb2c.

Root causes

Issue Cause
Codex layout false-positive Layout BFS credited (search-app)/layout → dashboard band for every page; f46d7a4e fixed always-standalone routes but missed /tools
Codex import-as-rendered Pre-existing walker hole; deliberately deferred as #115 (was #112 before merge renumber)
Merge conflict (prior) Ledger ID collision on #112 — already resolved
CI on prior tip Settling / superseded; no red product failure identified on tip

Changes made

  • Page-only roots now also use isStandaloneModeHomePath so /tools cannot pass via layout → ClinicalDashboard
  • Unit pin for reachabilityRoots(tools)
  • Cleared contradictory “Still live on main” wording in #096
  • Both Codex threads replied + resolved (#115 deferred with reason)

Validation

  • Adoption suite 6/6; full unit 4451 passed / 4 skipped; typecheck + prettier clean
  • Bugbot: no P0/P1 after the /tools fix
  • Unresolved review threads: 0
  • Merge: MERGEABLE, merge-tree clean, 0 behind main

Remaining blockers

  1. Hosted CI still settling on 66c5eb2c — wait for Static / Unit / PR required
  2. #115 remains open for a future walker that tracks JSX/default-export/dynamic() binding use
Open in Web Open in Cursor 

@BigSimmo

Copy link
Copy Markdown
Owner Author

@cursoragent Inspect the PR and repository state, identify the root cause of every failing CI check, unresolved review comment, merge conflict, and related defect. Apply the smallest robust fix using existing project patterns and best practices, without unrelated changes. Run Bugbot and all relevant lint, type-check, test, build, and CI-equivalent commands, fix any issues found, then resolve only the review comments that are fully addressed. Summarise the root causes, changes made, validation results, and any remaining blockers.

@cursor

cursor Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

PR #1394 is merged as squash 0d47141f on main. Closeout is complete.

Root causes

Issue Cause
Static PR / CircleCI red on tip 66c5eb2c prettier --check failed on docs/outstanding-issues.md — table padding drift in the #096 cell after merge/renumber edits
Codex layout false-positive Already fixed pre-tip (f46d7a4e + /tools in 8c39158d)
Codex import-as-rendered Deferred by design as #115 (lint catches the plausible slip)
Merge conflicts None on final tip (merge-tree clean; 0 behind)

Changes this pass

  • Prettier fix landed as 61314887 (same tree as my local attempt; remote won the race).
  • Main sync 4a001efa then squash-merged.
  • No product-code edits needed; Bugbot found no open P0/P1.
  • Review threads remain 0 unresolved (both Codex P2s already dispositioned).
  • Follow-up ledger-only PR: #1399 (cursor/pr-1394-ledger-closeout-c2bf @ f734dc4d).

Validation

  • Local: adoption suite 6/6; typecheck; lint; format:check; ledger guard
  • Hosted on pre-merge tip: Static PR, Unit coverage, PR required, CircleCI, Semgrep, Safety — all green
  • Bugbot: no tip-blocking findings; inventory layout credit only for dashboard-owned / and allowlisted /documents/search

Remaining

  • #115 still open (P3): walker treats import-as-rendered — intentional deferral
  • Recreated branch claude/top-search-design-mockups-w53znc @ 60bdb32e is post-merge noise (ledger-only); safe to delete once docs(ledger): record merged PR #1394 CI/review closeout #1399 lands
  • Fresh @Codex review PR produced no new inline findings yet
Open in Web Open in Cursor 

cursoragent and others added 6 commits July 30, 2026 03:04
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
isAlwaysStandaloneShellPath missed /tools (standalone mode home, but
outside the Suspense always-standalone list), so gutting tools/page.tsx
still reached the band via layout → ClinicalDashboard. Also clear the
contradictory "Still live on main" clause in #96 now that the root-path
gap is closed on this PR.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Prettier only, a single line. docs/outstanding-issues.md was left
unformatted by the #96 wording edit on the previous tip, failing both
ci/circleci: verify and Static PR checks — the third time this exact
break has landed today.

Recurs because format:check is not part of npm run test, typecheck, or
lint, so a change can report a clean suite and a clean prettier run on
the file it was focused on while the repository-wide check is red.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Akwz3Sdms8uJ5AkDt3CduY
@BigSimmo

Copy link
Copy Markdown
Owner Author

@codex review PR

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Chef's kiss.

Reviewed commit: 4a001efade

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@BigSimmo
BigSimmo merged commit 0d47141 into main Jul 30, 2026
18 of 19 checks passed
@BigSimmo
BigSimmo deleted the claude/top-search-design-mockups-w53znc branch July 30, 2026 03:16
BigSimmo added a commit that referenced this pull request Jul 30, 2026
Tip 66c5eb2 failed Static PR on prettier padding in #96; fixed on
6131488, then main sync landed as 4a001ef. Closeout confirms required
checks green with no open review threads.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
BigSimmo added a commit that referenced this pull request Jul 30, 2026
* issues: archive five completed rows, delete none

Triage pass over all 58 open items found five rows whose work is finished and
whose next action is empty. Each moves from Open items to Resolved / archive
with its fix evidence and the 2026-07-30 date:

- #95 the pr-required aggregate now routes a cancelled result through a shared
  cancelled_error helper; guarded by seven cases that execute the extracted
  script, three mutation-proven. The red is deliberately retained, since GitHub
  counts a skipped required check as passing.
- #96 every PR #1316 sub-item is dispositioned: the adoption-gate root-path gap
  closed on PR #1394, four findings were fixed independently, and the Therapy
  Compass retry-waiter finding was corrected to not-a-live-defect.
- #104 a correction row with no next action - the worker's triple image read is
  an accepted peak-memory trade-off documented at worker/main.ts:866-869, not
  debt. Archived so a fourth audit does not re-file it.
- #109 the branch sweep refuses on a shallow clone, an indeterminate result is
  its own failure, and the guard moved into the exported collector so the
  evidence-pack path fails closed too.
- #115 the band adoption gate was redesigned to walk a real reachability graph
  rather than asking whether a file mentions the band.

Nothing is deleted. The ledger contract is archive-only (SKILL.md:44 "Archive,
never delete"; this file's own conventions: "rows are archived, not deleted, so
the history stays auditable"), so no row qualifies for deletion. Row total is
unchanged at 120: 58 -> 53 open, 62 -> 67 archived.

Prettier widened the archive Outcome column to fit the new evidence, which
repads the other archive rows; git diff --ignore-all-space is 7 insertions /
7 deletions, i.e. the five moved rows plus both separators.

Verified: node scripts/check-outstanding-issues.mjs --self-test && node
scripts/check-outstanding-issues.mjs -> "Outstanding-issues guard passed: 120
rows (53 open, 67 archived), unique ids, next-id=126 above the highest".
npx prettier --check . -> "All matched files use Prettier code style!"

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011YdPS2KhKqz2buzsUgmX3c

* docs: record PR 1428 review

* docs: align issue 109 resolution date

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants